/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.losalpes.client;

import com.losalpes.persistence.entity.Ciudad;
import com.losalpes.persistence.entity.Cliente;
import com.losalpes.persistence.entity.Departamento;
import com.losalpes.persistence.entity.Pais;
import java.util.List;
import javax.ejb.Local;
import javax.faces.model.SelectItem;

/**
 *
 * @author Henry.Quiroga
 */
@Local
public interface IClientService {

    /**
     * Borra un cliente
     * @param cliente
     */
    void delete(Cliente cliente);

    /**
     * Metodo para guardar un cliente
     * @param cliente
     * @return 
     */
    void save(Cliente cliente);

    /**
     *
     * @param documento
     * @return
     */
    Cliente getCliente(String documento);

    /**
     *
     * @param documento
     * @return
     */
    boolean existeDocumento(String documento);

    /**
     * Obtiene una lista de todos los clientes
     * @return
     */
    List<Cliente> findAllClientes();

    /**
     * Permite realizar una lista de clientes basados en una serie de parametros
     * @param clienteBusqueda
     * @return
     */
    List<Cliente> findClientes(Cliente clienteBusqueda);

    /**
     * Obtiene la lista de tipos de documento
     * @return
     */
    SelectItem[] getTiposDocumentos();

    /**
     * Obtiene la lista de paises
     * @return
     */
    SelectItem[] getPaises();

    /**
     * Obtiene la lista de departamentos
     * @param pais
     * @return
     */
    SelectItem[] getDepartamentos(int pais);

    /**
     * Obtiene la lista de ciudades
     * @param departamento
     * @param pais
     * @return
     */
    SelectItem[] getCiudades(int departamento, int pais);

    /**
     * Obtiene el Pais a partir del identificador
     * @param id
     * @return
     */
    Pais getPaisById(Integer id);

    /**
     * Obtiene el departamento a partir del identificador
     * @param id
     * @return
     */
    Departamento getDepartamentoById(Integer id);

    /**
     * Obtiene la ciudad a partir de la identificacion
     * @param id
     * @return
     */
    Ciudad getCiudadById(Integer id);

    /**
     * Obtiene un cliente a partir del documento
     * @param documento
     * @return
     */
    public com.losalpes.persistence.entity.Cliente getClienteByDocumento(java.lang.String documento);

    /**
     * Obtiene un cliente a partir de la identificacion
     * @param documento
     * @return
     */
    public com.losalpes.persistence.entity.Cliente getCliente(java.lang.Long id);
}
